package cn.iocoder.yudao.module.esim.service.esasset;

import java.util.*;
import javax.validation.*;
import cn.iocoder.yudao.module.esim.controller.admin.esasset.vo.*;
import cn.iocoder.yudao.module.esim.controller.app.esasset.vo.AppEsAssetActiveReqVO;
import cn.iocoder.yudao.module.esim.controller.app.esasset.vo.AppEsAssetGetQrCodeReqVO;
import cn.iocoder.yudao.module.esim.dal.dataobject.esasset.EsAssetDO;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.module.esim.enums.esasset.EsAssetActiveStateEnum;

/**
 * eSim资产 Service 接口
 *
 * @author 超管
 */
public interface EsAssetService {

    /**
     * 创建eSim资产
     *
     * @param createReqVO 创建信息
     * @return 编号
     */
    String createEsAsset(@Valid EsAssetSaveReqVO createReqVO);

    /**
     * 更新eSim资产
     *
     * @param updateReqVO 更新信息
     */
    void updateEsAsset(@Valid EsAssetSaveReqVO updateReqVO);

    /**
     * 删除eSim资产
     *
     * @param id 编号
     */
    void deleteEsAsset(String id);

    /**
     * 获得eSim资产
     *
     * @param id 编号
     * @return eSim资产
     */
    EsAssetDO getEsAsset(String id);

    EsAssetDO getEsAsset(Long userId, String id);

    /**
     * 获得eSim资产分页
     *
     * @param pageReqVO 分页查询
     * @return eSim资产分页
     */
    PageResult<EsAssetDO> getEsAssetPage(EsAssetPageReqVO pageReqVO);

    List<EsAssetDO> listByActiveStatus(Long userId, List<EsAssetActiveStateEnum> activeStateEnumList, Set<String> iccids);

    EsAssetDO getActivatedESim(Long userId, Set<String> iccids);

    void setInUse(Long userId, String assetId);

    /**
     * 激活eSim
     * @param reqVO
     */
    void activeESim(Long userId, AppEsAssetActiveReqVO reqVO);

    /**
     * 创建eSim
     * @param orderNo 订单流水号
     * @param buyerEmail 购买用户的邮箱地址
     */
    String createESim(String orderNo, Long userId, String buyerEmail);

    /**
     * 获取二维码
     * @param reqVO
     * @return
     */
    String getQrCode(Long userId, AppEsAssetGetQrCodeReqVO reqVO);

    int setName(Long userId, String assetId, String name);

}